package com.music.model;

import java.io.File;
import java.io.IOException;


/**
 * Class allowing the creation of an object sound
 * It inherits from an album
 * @author antho
 */
public class Track extends Album{
	
	private int trackNumber;		//numéro de la chanson 
	private String trackName;		//nom de la chanson
	private int trackTime;			//temp de la chanson
	private String trackGenre;		//genre de la chanson
	private String trackDirectory;	//chemin du morceau
	private long trackSize;		//taille du fichier
	private String trackExtention;	//type du fichier

	// //////////////////////////////////////////////////////////////////////////////////////
	// ////// CONSTRUCTOR ////////
	// //////////////////////////////////////////////////////////////////////////////////////

	/**
	 * Constructor
	 * @param dir : track's directory
	 */
	public Track(String dir) {
		super();
		this.trackDirectory = dir;
		importTags();
	}

	////////////////////////////////////////////////////////////////////////////////////////
	////////	  							METHODS								    ////////						
	////////////////////////////////////////////////////////////////////////////////////////
		
	protected boolean contains(String s, String opt) {
		s = s.toLowerCase();
		if (opt.equals(Data.track))
			return this.trackName.matches("^.*(?i)"+s+".*$");
//			return this.trackName.toLowerCase().contains(s);
		else if (opt.equals(Data.album))
			return existAlbum(s);
		else if (opt.equals(Data.artist))
			return existArtist(s);
		else if (opt.equals(Data.genre))
			return this.trackGenre.matches("^.*(?i)"+s+".*$");
//			return this.trackGenre.toLowerCase().contains(s);
		else 
			return this.trackGenre.matches("^.*(?i)"+s+".*$") || this.trackName.matches("^.*(?i)"+s+".*$") || existAlbum(s) || existArtist(s);
//			return this.trackGenre.toLowerCase().contains(s) || this.trackName.toLowerCase().contains(s) || existAlbum(s) || existArtist(s);
	}
	
	/**
	 * 
	 */
	private void importTags(){
		Tags tag = new Tags();
		try {
			tag.readTag(new File(this.trackDirectory));
		} catch (IOException e) {e.printStackTrace();}
		super.setAlbumCaracteristics(tag.getArtist(), tag.getYear(), tag.getAlbum());
		this.trackGenre = tag.getGenre();
		this.trackName = tag.getTitle();
		this.trackNumber = tag.getTrack();
		this.trackSize = tag.getSize();
		this.trackExtention = tag.getExtension();
	}
	
	////////////////////////////////////////////////////////////////////////////////////////
	////////							GETTER SETTER								////////						
	////////////////////////////////////////////////////////////////////////////////////////

	
	////////////////////////////////////////////////////////////////////////////////////////
	////////								AFFICHAGE								////////						
	////////////////////////////////////////////////////////////////////////////////////////

	@Override
	public String toString() {
		return (super.toString()+"Track : "+this.trackNumber+" "+this.trackName+" "+this.trackTime+" "+this.trackGenre+" "+this.trackDirectory+" "+this.trackExtention+" "+((float)this.trackSize/1000/1000)+" Mo");
	}
}
